#!/bin/bash
###
# @Author: Logan.Li
# @Gitee: https://gitee.com/attacker
# @email: admin@attacker.club
# @Date: 2024-11-07 22:23:06
# @LastEditTime: 2024-11-07 22:23:43
# @Description:
###

# 获取最新版本信息
latest_version=$(curl -s https://mirrors.aliyun.com/nodejs-release/index.json | jq -r '.[0].version')

nodejs_archive="node-${latest_version}-linux-x64.tar.gz"
echo "Node.js archive name: $nodejs_archive"

# 检查文件是否存在
if [ ! -f "$nodejs_archive" ]; then
    url="https://mirrors.aliyun.com/nodejs-release/${latest_version}/${nodejs_archive}"
    echo "Download URL: $url"
    curl -sL "$url" -o "$nodejs_archive" || {
        echo "下载 Node.js 失败！"
        exit 1
    }
fi

# 解压文件
if [ -f "$nodejs_archive" ]; then
    tar -xf "$nodejs_archive" || {
        echo "解压 Node.js 失败！"
        exit 1
    }
else
    echo "归档文件不存在，无法解压。"
    exit 1
fi

# 检查是否已存在 /opt/nodejs 目录，如果不存在则创建
if [ ! -d "/opt/nodejs" ]; then
    sudo mkdir -p /opt/nodejs
fi

# 移动解压后的内容到 /opt/nodejs 目录下
extracted_dir="node-${latest_version}-linux-x64"
if [ -d "$extracted_dir" ]; then
    sudo mv "$extracted_dir"/* /opt/nodejs/ || {
        echo "移动 Node.js 内容失败！"
        exit 1
    }
    sudo rmdir "$extracted_dir" || {
        echo "删除临时目录失败！"
        exit 1
    }
else
    echo "解压目录不存在，无法移动内容。"
    exit 1
fi

# 设置环境变量前检查是否已设置过
if ! grep -q "/opt/nodejs/bin" ~/.bashrc; then
    echo 'export PATH=/opt/nodejs/bin:$PATH' >>~/.bashrc
    source ~/.bashrc
else
    echo "环境变量已设置，无需重复添加。"
fi

# 确保当前 shell 也加载了新的环境变量
export PATH=/opt/nodejs/bin:$PATH

# 打印当前的 PATH 变量
echo "Current PATH: $PATH"

# 验证 Node.js 和 npm 的版本
if command -v node &>/dev/null && command -v npm &>/dev/null; then
    node -v
    npm -v
else
    echo "Node.js 和 npm 命令未找到，请检查环境变量是否正确设置。"
    # 使用完整路径验证命令
    /opt/nodejs/bin/node -v
    /opt/nodejs/bin/npm -v
fi

# 完成安装
echo "Node.js ${latest_version} has been installed."
